﻿/*
 * Creado por SharpDevelop.
 * Usuario: Pavilion
 * Fecha: 07/10/2011
 * Hora: 09:17 p.m.
 * 
 * Para cambiar esta plantilla use Herramientas | Opciones | Codificación | Editar Encabezados Estándar
 */
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections.Generic;
using Negocio;
using Datos;
using Excepciones;

namespace Clase2
{
	public partial class AltaInfraccion : Form
	{
		private List<String> tiposInfracciones;
		private List<Vehiculo> vehiculos;
		private List<Infraccion> infracciones;
        private List<InfraccionVehiculo> infraccionVehiculos;

		public AltaInfraccion(List<String> infraccionesTipo, List<Vehiculo> vehiculos,List<Infraccion> infracciones, List<InfraccionVehiculo> infraVehiculos)
		{
			InitializeComponent();
			this.tiposInfracciones = infraccionesTipo;
			this.vehiculos = vehiculos;
			this.infracciones = infracciones;
            this.infraccionVehiculos = infraVehiculos;
			cmb_infraccion.DataSource   = this.tiposInfracciones;
			cmb_vehiculo.DataSource     = this.vehiculos;
			cmb_infraFinal.DataSource   = this.infracciones;
			this.setearCombo();
			this.setDataGrid();
		}
		
		public List<Infraccion> ListaInfracciones {
			get { return this.infracciones; }
		}
		
		public List<Vehiculo> ListaVehiculos {
			get { return this.vehiculos; }
		}
		
		private void setDataGrid() {
			if (cmb_vehiculo.SelectedItem != null)
               dtg_infracciones.DataSource = this.cargarInfraccionesVehiculo((Vehiculo)cmb_vehiculo.SelectedItem);
		}

        private List<InfraccionVehiculo> cargarInfraccionesVehiculo(Vehiculo vehiculo)
        {
            List<InfraccionVehiculo> ret = new List<InfraccionVehiculo>();

            foreach (InfraccionVehiculo inf in this.infraccionVehiculos)
            {
                if (vehiculo.Id.Equals(inf.Vehiculo.Id))
                {
                    ret.Add(inf);
                }
            }

            return ret;
        }

		private void setearCombo() {						
			if (this.cmb_infraccion.SelectedIndex == 0) {
				cmb_infraFinal.DataSource = obtenerInfraccionesPorTipo("Grave");
			} else {
				cmb_infraFinal.DataSource = obtenerInfraccionesPorTipo("Leve");
			}
		}
		
		private List<Infraccion> obtenerInfraccionesPorTipo(string tipo) {
			List<Infraccion> listado = new List<Infraccion>();
			
			foreach (Infraccion infra in this.infracciones) {
				if (infra.obtenerTipo().Equals(tipo)) {
					listado.Add(infra);
				}
			}
			
			return listado;
		}
		
		
		void Button1Click(object sender, EventArgs e)
		{
			this.Close();
		}
		
		void Btn_guardarClick(object sender, EventArgs e)
		{
			if (cmb_infraFinal.SelectedItem == null || cmb_vehiculo.SelectedItem == null
			    || cmb_infraccion.SelectedItem == null) {
				
				MessageBox.Show("Faltan completar datos");
			} else {
				Vehiculo vehiculo = (Vehiculo)cmb_vehiculo.SelectedItem;
				Infraccion infraccion = (Infraccion)cmb_infraFinal.SelectedItem;
				
				InfraccionVehiculo iv = new InfraccionVehiculo();
				iv.Infraccion = infraccion;
				iv.Pago = false;
				iv.Importe = infraccion.Importe;
				iv.FechaSuceso = DateTime.Now;
				iv.Vehiculo = vehiculo;
				
				vehiculo.agregarInfraccion(iv);
				iv.guardarInfraccionVehiculo();
				
				dtg_infracciones.DataSource = null;
				dtg_infracciones.DataSource = vehiculo.ListaInfracciones;
                this.Close();
			}
		}
		
			
		void Cmb_infraccionSelectedIndexChanged(object sender, EventArgs e)
		{
			cmb_infraFinal.DataSource = null;
			this.setearCombo();
		}
		
		void Cmb_vehiculoSelectedIndexChanged(object sender, EventArgs e)
		{
			this.setDataGrid();
		}
	}
}
